iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

從爬蟲到架站系列 第 15

Day 14: 從爬蟲到架站-增加功能(近況)

  • 分享至 

  • xImage
  •  

今天一直在解決firebase的問題,網頁顯示沒資料,但get的到...


跟之前的功能一樣,在app.py增加API

app.py

@app.route('/get_recent', methods=['POST'])
def get_recent():
    player = str(request.form.getlist('p')[0])
    stat = get_hitter_stat(player)
    if stat:
        return jsonify(stat['近況'])
    else:
        return redirect(url_for('index'))

並且在index.html寫ajax

function get_recent(){
    let p = document.getElementById("player").value;
    if(p!=='選擇球員'){
        let recent_table_head = $('#recent_stat_table > thead');
        let recent_table_body = $('#recent_stat_table > tbody');
        $.ajax({
            type: 'POST',
            url: "/get_recent",
            data: { "p": p },
            success: function (result) {
                recent_table_head.empty();
                recent_table_body.empty();
                let head = ['Date', 'OPP', 'PA', 'AB', 'RBI', 'R', 'H', '2B', '3B', 'HR', 'SO', 'SB', 'CS', 'AVG'];
                let tr = $('<tr/>');
                for(let i = 0; i < head.length; i++){
                    let th = $('<th/>', {
                        scope: 'col',
                        text: head[i]
                    });
                    tr.append(th);
                }
                recent_table_head.append(tr);

                for(let i = 0; i < result['Date'].length; i++){
                    let recent_body_tr = $('<tr/>');
                    for(let type in head){
                        let recent_body_th = $('<th/>', {
                            scope: 'col',
                            text: result[head[type]][i]
                        });
                        recent_body_tr.append(recent_body_th);
                    }
                    recent_table_body.append(recent_body_tr);
                }
            }
        });
    }
}

並且在Html增加表格

 <p>
    <h2 class="mb-0">
        <button class="btn btn-secondary btn-lg btn-block" type="button" data-toggle="collapse" data-target="#recent_table"
            aria-expanded="false" aria-controls="recent_table">
            打擊近況
        </button>
    </h2>
</p>
<div class="collapse" id="recent_table">
    <table id="recent_stat_table" class="table">
        <thead>

        </thead>
        <tbody></tbody>
    </table>
</div>

補充說明:

js那邊要特別宣告一個head是因為要控制數據的順序,因為讀出來的順序不一定是我要的,所以我特別宣告一個變數。


並且把前面的db_connect.py改寫了一下

def store_recent(data):
    db = firestore.client()
    batch = db.batch()

    for player in data:
        doc_ref = db.collection(u'打者').document(player['Name'])
        doc = doc_ref.get()
            
        if doc.exists and doc.to_dict()['近況'] != {}:
            batch.update(doc_ref, {u'近況':player})
        else:
            doc_ref.set({u'近況':player}, merge = True)
    batch.commit()

多增加條件讓資料不會被覆蓋掉

發現還是必須將年度數據也爬下來比較完整,爬的時候希望能改掉前面比較醜的寫法。


上一篇
Day 13: 從爬蟲到架站-增加功能(近況)
下一篇
Day 15: 從爬蟲到架站-爬取年度數據
系列文
從爬蟲到架站21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言